package lx300;

import modelo.ctrc;

public abstract class EmissorCtrc {

	protected ctrc ctrcAtual;
	protected StringBuffer destino;

	public EmissorCtrc(ctrc ctrc, StringBuffer destino) {
		this.ctrcAtual = ctrc;
		this.destino = destino;
	}

	/*** Métodos abstratos ***/
	public abstract void emitir();

	/*** Métodos de Impressão ***/
	public ctrc getCtrc() {
		return this.ctrcAtual;
	}

	protected void adicionar(String texto) {
		this.destino.append(texto);
	}

	protected void darEspaco(int qtde) {
		this.destino.append(getEspaco(qtde));
	}

	protected void quebrarLinha() {
		this.destino.append("\n");
	}

	protected void quebrarLinha(int qtde) {
		for (int x = 1; x <= qtde; x++) {
			quebrarLinha();
		}
	}

	protected String getEspaco(int qtde) {
		String result = "";
		for (int x = 1; x <= qtde; x++) {
			result += " ";
		}
		
		return result;
	}
	
	protected String alinharCentro(String texto, int tamanho) {
	      int inicio;
	      int fim;
	      int diferenca;

	      if (texto == null) {
	    	  return getEspaco(tamanho);
	      } else {
		      if (texto.length() > tamanho) {
		          return texto.substring(0, tamanho);
		      } else {
		          diferenca = tamanho - texto.length();
		          inicio = diferenca / 2;
		          fim = diferenca - inicio;
	
		          return getEspaco(inicio) + texto + getEspaco(fim);
		      }
	      }
	}

	protected String alinharDireita(String texto, int tamanho) {
	      int diferenca;

	      if (texto == null) {
	    	  return getEspaco(tamanho);
	      } else {
		      if (texto.length() > tamanho) {
		          return texto.substring(0, tamanho);
		      } else {
		          diferenca = tamanho - texto.length();
	
		          return getEspaco(diferenca) + texto;
		      }
	      }
	}

	protected String alinharEsquerda(Integer inteiro, int tamanho) {
		if (inteiro != null) {
			return alinharEsquerda(inteiro.toString(), tamanho);
		} else {
			return getEspaco(tamanho);
		}
	}
	
	protected String alinharEsquerda(String texto, int tamanho) {
	      int diferenca;

	      if (texto == null) {
	    	  return getEspaco(tamanho);
	      } else {
		      if (texto.length() > tamanho) {
		          return texto.substring(0, tamanho);
		      } else {
		          diferenca = tamanho - texto.length();

		          return texto + getEspaco(diferenca);
		      }
	      }
	}
}
